# 作者： 李泉志
# 2025年01月05日19时21分秒
# 2947029073@qq.com

"""
4.1 字符串的定义
• 字符串就是一串字符，是编程语言中表示文本的数据类型
• 在Python中可以使用一对双引号 " 或者一对单引号 ' 定义一个字符串
    – 虽然可以使用 \" 或者 \' 做字符串的转义，但是在实际开发中：
        • 如果字符串内部需要使用 "，可以使用 ' 定义字符串
        • 如果字符串内部需要使用 '，可以使用 " 定义字符串
• 可以使用索引获取一个字符串中指定位置的字符，索引计数从0开始
• 也可以使用循环遍历字符串中每一个字符
"""


def str_find():
    """
    字符串查找
    :return:
    """
    s1 = "hello world"
    print(s1.find("ld"))  # 9


def str_replace():
    """
    字符串替换
    :return:
    """
    s1 = "hello world"
    s2 = s1.replace("ld", "LD", 1)  # 第3个参数指替换次数
    print(s2)  # hello worLD


def str_split_join():
    """
    字符串分割与连接
    :return:
    """
    s1 = "hello world 66"
    print(s1.split())  # 按空格分割，返回列表
    # 按l分割4次，['he', '', 'o wor', 'd20 66']
    print(s1.split("l", 4))

    s2 = 'abc\nbcd\nefg'
    print(s2.splitlines())
    s3 = 'abc\r\nbcd\r\nefg'  # \r是回车不是换行，光标回到最前面
    print(s3.splitlines())  # 效果同上句一样 ['abc', 'bcd', 'efg']
    print(s3.splitlines(True))  # ['abc\r\n', 'bcd\r\n', 'efg']

    str_list = ['a', 'b', 'c', 'd20']
    print(''.join(str_list))  # 第一个参数是接起来含有什么
    print('1'.join(str_list))  # 用1接起来  a1b1c1d


"""
字符串的切片
• 切片方法适用于字符串、列表、元组
    – 字符串是字符的集合
    – 切片使用索引值来限定范围，从一个大的字符串中切出小的字符串
    – 列表和元组都是有序的集合，都能够通过索引值获取到对应的数据
    – 字典是一个无序的集合，使用键值对保存数据
字符串[开始索引:结束索引:步长]
注意：
1. 指定的区间属于左闭右开型 [开始索引, 结束索引) 
    – 从起始位开始，到结束位的前一位结束（不包含结束位本身)
2. 从头开始，开始索引数字可以省略，冒号不能省略
3. 到末尾结束，结束索引数字可以省略，冒号不能省略
4. 步长默认为 1，如果连续切片，数字和冒号都可以省略
"""


def str_slice():
    """
    字符串切片
    :return:
    """
    num_str = "123456789"
    print(num_str[0:3])  # 123:0-2
    print(num_str[3:])  # 456789:3-结束
    print(num_str[:3])  # 123:0-2
    print(num_str[::2])  # 13579:0-结束，步长为2
    print(num_str[:])  # 123456789:0-结束，步长为1
    print(num_str[1::2])  # 2468:1-结束，步长为2
    print(num_str[2:-1])  # 345678:2-结束，步长为1
    print(num_str[-2:])  # 89:倒数第二位开始，到结束
    print(num_str[-2:-5:-1])  # 876:倒数第二位开始，倒数第四位结束，步长为-1(逆序步长1)


def list_slice():
    """
    列表切片
    :return:
    """
    my_list = list("123456789")
    print(my_list)  # ['1', '2', '3', '4', '5', '6', '7', '8', '9']
    print(str(my_list))  # 等同上句，直接在list外加引号
    print(my_list[0:3])  # 123


if __name__ == '__main__':
    # str_find()
    # str_replace()
    # str_split_join()
    # str_slice()
    list_slice()
